Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

268
Vistas
Obteniendo "MongoExpiredSessionError: no se puede usar una sesión que finalizó" cuando se usa forEach para actualizar el documento, pero ¿por qué?

Solo estoy tratando de cambiar un par de valores clave, es decir, {mark: done} en mi base de datos Mongo usando la identificación que he almacenado en una matriz.

Pero por mi vida, no puedo entender por qué si uso un ciclo for funciona bien. Pero si uso un bucle forEach, aparece el error "No se puede usar una sesión que finalizó".

Espero que alguien me ayude a explicar por qué sucede esto.

Código repetitivo

 import { MongoClient } from "mongodb"; const uri = "mongodb://localhost:27018/"; const client = new MongoClient(uri);

Función con implementación "for loop"

 async function updateMongo1() { const db = client.db("testDB"); const coll = db.collection("testCollection"); await client.connect(); try { let array = [ "2021-10-18", "2021-10-17", "2021-10-16", "2021-10-15", "2021-10-14", ]; for (let i = 0; i < array.length; i++) { await coll.updateOne( { _id: array[i] }, { $set: { mark: "done" } }, { upsert: true } ); } } catch (e) { console.error(e.message); } finally { await client.close(); } }

Función con implementación "forEach"

 async function updateMongo2() { const db = client.db("testDB"); const coll = db.collection("testCollection"); await client.connect(); try { let array = [ "2021-10-18", "2021-10-17", "2021-10-16", "2021-10-15", "2021-10-14", ]; array.forEach(async (element) => { await coll.updateOne( { _id: element }, { $set: { mark: "done" } }, { upsert: true } ); }); } catch (e) { console.error(e.message); } finally { await client.close(); } }

ejecutar diferentes implementaciones produce resultados diferentes.

 (async () => { //await updateMongo1(); //-> this works await updateMongo2(); //-> this gives "MongoExpiredSessionError: Cannot use a session that has ended" what gives?? })();

Por favor, hágame saber por qué sucede esto.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La variable del elemento es una matriz, por ejemplo ["2021-10-18"] . En la segunda implementación, estaba destinado a acceder al element[0] pero lo olvidó, por lo que colocó una matriz en el campo _id.

No sé si eso es lo que está causando específicamente su error, pero es un error en la implementación.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda